package com.glr.subject.controller;

import com.glr.common.contants.CodeEnum;
import com.glr.common.utils.RedisOperator;
import com.glr.common.utils.ResultUtils;
import com.glr.subject.entity.Tag;
import com.glr.subject.service.TagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

/**
 * 学科标签控制层
 *
 * @author GLoRy
 * @date 2021/6/8 22:16
 */
@RestController
@RequestMapping("/tag")
public class TagController {

    @Autowired
    private TagService tagService;

    @Autowired
    private RedisOperator redisOperator;

    /**
     * 添加学科标签信息
     *
     * @param tag 学科标签实体
     * @return 添加结果
     */
    @PostMapping("/save")
    public ResultUtils save(@RequestBody Tag tag) {
        tagService.save(tag);
        return new ResultUtils(true, CodeEnum.SUCCEED, "添加学科标签信息成功");
    }

    /**
     * 根据id修改学科标签信息
     *
     * @param tag 学科标签实体
     * @param id  学科标签id
     * @return 修改结果
     */
    @PutMapping("/update/{id}")
    public ResultUtils update(@RequestBody Tag tag, @PathVariable String id) {
        tag.setTagId(Integer.valueOf(id));
        tagService.update(tag);
        return new ResultUtils(true, CodeEnum.SUCCEED, "修改学科标签信息成功");
    }

    /**
     * 根据id删除学科标签信息
     *
     * @param id 学科标签id
     * @return 删除信息
     */
    @DeleteMapping("/delete/{id}")
    public ResultUtils delete(@PathVariable String id) {
        tagService.delete(Integer.valueOf(id));
        return new ResultUtils(true, CodeEnum.SUCCEED, "修改学科标签信息成功");
    }


    /**
     * 根据id查询学科标签信息
     *
     * @param id 学科标签id
     * @return 根据id查询的标签结果
     */
    @GetMapping("/findById/{id}")
    public ResultUtils findById(@PathVariable String id) {
        return new ResultUtils(true, CodeEnum.SUCCEED, "查询学科课程信息成功", tagService.findById(Integer.valueOf(id)));
    }

    /**
     * 查询所有学科标签信息
     *
     * @return 查询学科标签信息的结果
     */
    @GetMapping("/findAll")
    public ResultUtils findAll() {
        String tagList = redisOperator.get("tagList");
        if (tagList != null) {
            return new ResultUtils(true, CodeEnum.SUCCEED, "查询学科课程信息成功", tagList);
        } else {
            return new ResultUtils(true, CodeEnum.SUCCEED, "查询学科标签信息成功", tagService.findAll());
        }
    }

    /**
     * 分页查询所有学科标签信息
     *
     * @param page     当前页
     * @param pageSize 每页条数
     * @return 分页查询学科标签的信息的结果
     */
    @GetMapping("/findByPage/{page}/{pageSize}")
    public ResultUtils findByPage(@PathVariable String page, @PathVariable String pageSize) {
        String tagPage = redisOperator.get("tagList");
        if (tagPage != null) {
            return new ResultUtils(true, CodeEnum.SUCCEED, "查询学科课程信息成功", tagPage);
        } else {
            Page<Tag> tags = tagService.findByPage(Integer.valueOf(page), Integer.valueOf(pageSize));
            return new ResultUtils(true, CodeEnum.SUCCEED, "查询学科标签信息成功", tags.getContent());
        }
    }
}
